package gu.sql2java.excel.config;

import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;

/**
 * 属性/字段访问接口
 * @author guyadong
 *
 */
public interface PropertyConfig{
	/**
	 * @return 返回属性的名字,不可为{@code null}或空
	 */
	public abstract String getNestedName();
	/**
	 * 设置属性的名字,多级属性名以.分割
	 * @param nestedName
	 */
	void setNestedName(String nestedName);
	/**
	 * 从指定的对象读取属性的值
	 * @param from
	 * @return 属性的值,输入对数为{@code null}则返回{@code null}
	 */
	public abstract Object readFrom(Object from);
	/**
	 * 将值写入指定的对象,输入参数为{@code null}则忽略
	 * @param to
	 * @param value
	 */
	public abstract void writeTo(Object to,Object value);
	/**
	 * @return 返回属性的Excel输入/输出字段配置对象
	 */
	public ColumnConfig getColumnConfig();
	/**
	 * 设置属性的Excel输入/输出字段配置对象
	 * @param columnConfig
	 */
	public void setColumnConfig(ColumnConfig columnConfig);
	/**
	 * 设置所属的Excel表输出全局配置
	 * @param parentConfig
	 */
	public void setParent(SheetConfig parentConfig);
	/**
	 * 返回Excel导出时的列名,
	 * 取值优先序:{@link ColumnConfig#name}字段,{@link ColumnConfig#columnName}字段{@link #getNestedName()}
	 */
	public String getExcelColumnName();
	/**
	 * 返回EXCEL导入的字段对应的Java对象字段名
	 * @since 3.29.0
	 */
	public String getImportColumnName();
	/**
	 * 返回指定值的数据格式
	 * @param value
	 * @return 输入参数为{@code null}返回空字符串
	 */
	public String getDataFormat(Object value);
	/**
	 * 返回导出字段水平对齐方式,如果未定义则使用{@link SheetConfig}中的默认值
	 */
	public HorizontalAlignment getHorizontalAlign();
	/**
	 * 返回单元格填充颜色,如果未定义则使用{@link SheetConfig}中的默认值
	 */
	public IndexedColors getFillColor();
	/**
	 * 返回导出字体颜色,如果未定义则使用{@link SheetConfig}中的默认值
	 */
	public IndexedColors getColor();
}
